from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any

class HotelRecommendRequest(BaseModel):
    date: str = Field(..., description="入住日期")
    location: str = Field(..., description="酒店位置")

class HotelRecommendResponse(BaseModel):
    hotels: List[str] = Field(..., description="推荐酒店列表")

class HotelOrderRequest(BaseModel):
    hotel_name: str = Field(..., description="酒店名称")
    date: str = Field(..., description="入住日期")
    user: str = Field(..., description="预订用户")

class HotelOrderResponse(BaseModel):
    order_id: str = Field(..., description="订单号")
    status: str = Field(..., description="订单状态")

class WeatherQueryRequest(BaseModel):
    location: str = Field(..., description="查询位置")

class WeatherQueryResponse(BaseModel):
    location: str = Field(..., description="查询位置")
    weather: str = Field(..., description="天气情况")
    temperature: str = Field(..., description="温度")

class TrainTicketQueryRequest(BaseModel):
    from_location: str = Field(..., description="出发地")
    to_location: str = Field(..., description="目的地")
    date: str = Field(..., description="出发日期")

class TrainTicketQueryResponse(BaseModel):
    trains: List[str] = Field(..., description="可选车次列表")

class TrainOrderRequest(BaseModel):
    train_no: str = Field(..., description="火车班次")
    user: str = Field(..., description="预订用户")
    date: str = Field(..., description="出发日期")

class TrainOrderResponse(BaseModel):
    order_id: str = Field(..., description="订单号")
    status: str = Field(..., description="订单状态")

class SightRecommendRequest(BaseModel):
    location: str = Field(..., description="景点位置")

class SightRecommendResponse(BaseModel):
    sights: List[str] = Field(..., description="推荐景点列表")

class SightInfoRequest(BaseModel):
    sight_name: str = Field(..., description="景点名称")

class SightInfoResponse(BaseModel):
    name: str = Field(..., description="景点名称")
    intro: str = Field(..., description="景点介绍")

class TravelPlanRequest(BaseModel):
    locations: List[str] = Field(..., description="旅行地点列表")
    dates: List[str] = Field(..., description="旅行日期列表")
    params: Optional[Dict[str, Any]] = Field(None, description="可扩展参数，如天气、火车票、住宿等")

class TravelPlanResponse(BaseModel):
    plan: str = Field(..., description="旅行计划内容")
